
/* According to POSIX.1-2001, POSIX.1-2008 */
#include <sys/select.h>

/* According to earlier standards */
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include "select.h"

// extern int select(int nfds, fd_set *readfds, fd_set *writefds,
//             fd_set *exceptfds, struct timeval *timeout);

// extern void FD_CLR(int fd, fd_set *set);
// extern int  FD_ISSET(int fd, fd_set *set);
// extern void FD_SET(int fd, fd_set *set);
// extern void FD_ZERO(fd_set *set);

// fd_set set;
// FD_ZERO(&set); /*将set清零使集合中不含任何fd*/
// FD_SET(fd, &set); /*将fd加入set集合*/
// FD_CLR(fd, &set); /*将fd从set集合中清除*/
// FD_ISSET(fd, &set); /*在调用select()函数后，用FD_ISSET来检测fd是否在set集合中，当检测到fd在set中则返回真，否则，返回假（0）*/

extern int g_buttonfd;
extern int g_socketfd;
// 将g_button_fd
void m_select(void)
{
    fd_set readfd, tmpfd;
    // select 的本质 是从0到最大fd进行循环检查 传参的时候需要最大fd
    int maxfd = (g_buttonfd > g_socketfd)?g_buttonfd:g_socketfd;
    FD_ZERO(&readfd); /*将set清零使集合中不含任何fd*/
    FD_ZERO(&tmpfd); /*将set清零使集合中不含任何fd*/
    // 将fd 句柄加入监控
    FD_SET(g_buttonfd,&readfd);
    if(FD_ISSET(g_buttonfd,&readfd)!=0)      /*测试fd是否包含在集合中*/        
        printf("g_buttonfd has been set\n");    
    else        
        printf("g_buttonfd has not been set\n"); 

    FD_SET(g_socketfd,&readfd);
    if(FD_ISSET(g_socketfd,&readfd)!=0)      /*测试fd是否包含在集合中*/        
        printf("g_socketfd has been set\n");    
    else        
        printf("g_socketfd has not been set\n");  

    struct timeval tm;
    int ret = select(maxfd, &readfd, NULL, NULL, &tm);
    if(-1 == ret)
    {
        
    }
}

